/*
 * Copyright (c) 2018. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 * Morbi non lorem porttitor neque feugiat blandit. Ut vitae ipsum eget quam lacinia accumsan.
 * Etiam sed turpis ac ipsum condimentum fringilla. Maecenas magna.
 * Proin dapibus sapien vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget metus.
 * Vestibulum commodo. Ut rhoncus gravida arcu.
 */

package com.j4dream.property.leetcode.basic.article;

public class Article {
    /*
     给定一个矩阵 A， 返回 A 的转置矩阵。
     矩阵的转置是指将矩阵的主对角线翻转，交换矩阵的行索引与列索引。
    */
    public int[][] transpose(int[][] A) {
        int r = A[0].length, c = A.length;
        int[][] res = new int[r][c];

        for (int i = 0; i < r; i++) {
            for (int j = 0; j < c; j++) {
                // res[i][j] = A[j][i];
                res[i][j] = A[j][i];
            }
        }
        return res;
    }

    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode first = dummy;
        ListNode second = dummy;
        for (int i = 0; i < n + 1; i++) {
            first = first.next;
        }

        while (first != null) {
            first = first.next;
            second = second.next;
        }
        second.next = second.next.next;
        return second.next;
    }

    public boolean buddyStrings(String A, String B) {
        if (A.length() != B.length()) return false;

        return true;
    }


    // 题目：一副从1到n的牌，每次从牌堆顶取一张放桌子上，再取一张放牌堆底，直到手上没牌，最后桌子上的牌是从1到n有序，设计程序，输入n，输出牌堆的顺序数组。
    //
    //知乎上看了微软大神给的思路，我在这翻译一下。。。
    //
    //以n=5为例，
    //
    //每位对应的槽                1    2     3    4    5
    //
    //原来的数组                    1    2    3    4    5     ------（1）
    //
    //变换一次后的数组         1    3    5    4    2     ------（2）
    //
    //.....
    //
    //推出结果前一次的数组  1    5    2    4    3     ------- （3）
    //
    //最后的顺序数组             1    2    3    4    5     ------- （4）
    //
    //由题意知我们要推的是 {.......} 变换得到 1 2 3 4 5
    //
    //因为（2）是由（1）变换得到的，槽2到了槽5，槽3到了槽2，槽4到了槽4，槽5到了槽3，
    //
    //所以逆推的话，是由（4）推回（3），也就是说，（4）中的槽5的数字应该到（3）中的槽2，槽2到了槽3，槽4到了槽4，槽3到了槽5，按照这个逻辑写出来就是（3），所以（3）反过来正推就是（4）。
    public void poker() {

    }

}
